\chapter{启动操作系统}\label{ch_boot}

\section{本章概要}

\paragraph{一句话描述}
站在操作系统的最底层，了解操作系统的启动，与物理硬件：CPU，内存和多种外设实现“零距离”接触，看到它们并管理它们！

\paragraph{概述}

其实这一章的内容与操作系统原理相关的部分较少，与计算机体系结构的细节相关的部分较多。但这些内容对写一个操作系统关系较大，要知道操作系统是直接与硬件打交道的软件，所以它需要``知道''需要硬件细节，才能更好地控制硬件。另一方面，部分内容涉及到操作系统的重要抽象--中断类异常，能够充分理解中断类异常为以后进一步了解进程切换、上下文切换等概念会很有帮助。

\paragraph{本章收获的知识}

\begin{itemize}
	\item
	与操作系统原理相关
	\item
	I/O设备管理：涉及程序循环检测方式和中断启动方式、I/O地址空间
	\item
	内存管理：基于分段机制的内存管理
	\item
	异常处理：涉及中断、故障和陷阱
	\item
	特权级：内核态和用户态
	\item
	计算机系统和编程
	\item
	硬件	
	\begin{itemize}
		\item
		计算机从加电到加载操作系统内核的整个过程
		\item
		OS内核在内存中的布局
		\item
		串口访问、时钟访问
	\end{itemize}
	\item
	软件	
	\begin{itemize}
		\item
		ELF执行文件格式
		\item
		栈的实现并实现函数调用栈跟踪函数
		\item
		调试操作系统
	\end{itemize}
\end{itemize}

\paragraph{本章涉及的实验}

本章的实验内容涉及的是写一个bootloader能够启动一个操作系统--ucore。在完成bootloader的过程中，逐渐增加bootloader和ucore的能力，涉及CPU的模式切换、解析ELF执行文件格式等，这对于理解操作系统的加载过程以及在操作系统在内存中的位置、内存管理、用户态与内核态的区别等有帮助。而相关project中bootloader和操作系统本身的字符显示的I/O处理、读硬盘数据的I/O处理、键盘/时钟的中断处理等内容，则是操作系统原理中一般在靠后位置提到的设备管理的实际体现。纵观操作系统的发展史，从早期到现在的操作系统主要功能之一就是完成繁琐的I/O处理，给上层应用提供比较简洁的I/O服务，屏蔽硬件处理的复杂性。这也是操作系统的虚拟机功能的体现。另外，本章还介绍了对硬件模拟器的使用，对操作系统的panic处理和远程debug功能的支持，这样有助于读者能够方便地分析操作系统中的错误和调试操作系统。由于本章涉及的硬件知识较多，无疑增大了读者的阅读难度，需要读者在结合阅读本章并实际动手实验来进行深入理解。

读者通过阅读本章的内容并动手实践相关的4个实验项目：

\begin{itemize}
	\item
	proj1：能够显示字符的bootloader
	\item
	proj2/3：可读ELF格式文件的bootloader和显示字符的ucore
	\item
	proj4：可管理中断和处理基于中断的键盘/时钟的ucore
\end{itemize}





\input{proj1_small_bootloader}
\input{poweron}
\input{io_access}
\input{protect_mode}
\input{real_mode_switch_protect_mode}
\input{setup_stack}
\input{show_string}

\input{proj2_bootloader_load_ucore}
\input{access_harddisk}
\input{elf_format}
\input{ucore_code}
\input{load_run_ucore}
\input{show_string_in_ucore}

\input{proj4_intr_in_ucore}
\input{hardware_intr}
\input{init_intr_controller}
\input{init_IDT}
\input{init_intr_in_device}
\input{ISR_in_ucore}

\section{小结}
缺